class Solution {
public:
     long long    int  dp[31][1001];
       int rec(int n, int k,long long int sum)
        {
               if (sum==0&&n==0) return 1;
               if(sum<0||n<=0) return 0;
               if (dp[n][sum]!=-1) return dp[n][sum];
               long long int pick=0,ntpick=0;
               for(int i=1;i<=k;i++)
               {
         pick += (rec(n-1,k,sum-i));  
               }
               return dp[n][sum]=pick%1000000007; 
    }
    int numRollsToTarget(int n, int k, int target) {
             memset(dp,-1,sizeof(dp));
             return rec(n,k,target)%1000000007;
    }
};
